import axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse, AxiosError } from "axios"
import { getToken } from "@/utils/index"
import { REQUEST_HEADER_KEY } from "@/constant/index"
/** 接口返回的对象 */
export interface Result<T> {
  // 常规或者不确定
  data: T
  message: string
  code: number
}

const service: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_APP_MARK, // /api/login/
  timeout: 50000,
})

// 添加请求拦截器
service.interceptors.request.use(
  (config: any) => {
    // if (config && config?.headers && getToken()) {
    //   config.headers.token = getToken();
    // }
    config.headers[REQUEST_HEADER_KEY] = getToken() || "W6sr9HAWNd4NBNVC0IceoKt5LrgXwsrhp0LnYsYrjHtIJaW1PwPLHLW5R8XKxtU0"
    // 在发送请求之前做些什么
    return config
  },
  (error: AxiosError) => {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse) => {
    // 业务状态码 resCode
    const data = response.data
    if (data.code === 200) {
      return Promise.resolve(data.result)
    } else {
      const code = data.resCode
      // 处理业务错误的逻辑
      // if(code === xxx) {

      // }
      // if(code === xxx) {

      // }
      // 这里是业务失败，不是http状态失败
      return Promise.reject(data)
    }
  },
  (error: AxiosError) => {
    // token 失效
    const status = error.response?.status // http的响应状态
    switch (status) {
      case 400:
        break
      case 401:
        // Modal.confirm({
        //   title: "提示",
        //   content: "token失效，请重新登录",
        //   onOk: () => {},
        // });
        break
      default:
    }
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error)
  }
)

export default service
